
const async = require("async");
const os = require('os-utils');
const Result = require('./result');

function getResponseTime(seconds) {
    let t = parseInt(seconds);
    let d = parseInt(t / 60 / 60 / 24);
    let h = parseInt(t / 60 / 60) % 24;
    let m = parseInt(t / 60) % 60;
    let s = parseInt(t) % 60;
    let res = '';
    if (d && d != 0) res += `${d}天`;
    if (h && h != 0) res += `${h}时`;
    if (m && m != 0) res += `${m}分`;
    if (s && s != 0) res += `${s}秒`;
    return res
}

function getCpuUsage(callback){
    //计算下一秒的CPU使用率。这不是“os”模块中 CPU 使用率的平均值。回调将接收一个带有值的参数
  os.cpuUsage(percentage=>{
      callback(null, { name:"CPU使用率", value: (100 * percentage).toFixed(2) + "%" });
  });
}
function getCpuFree(callback){
  // 计算下一秒的空闲CPU。这不是基于像“os”模块中的平均 CPU 使用率。回调将接收一个带有值的参数
   os.cpuFree(percentage=>{
      callback(null, { name:"空闲CPU", value: (100 * percentage).toFixed(2) + "%" });
    });
}

function get(){
  return [
    {name:"平台名称", value: os.platform() },
    {name:"CPU数量(逻辑处理器)", value: os.cpuCount() },
    {name:"可用内存", value: os.freemem().toFixed(2) +"MB" },
    {name:"总内存", value: os.totalmem().toFixed(2) +"MB" },
    {name:"已用内存的百分比", value: (100 * (1 - os.freememPercentage())).toFixed(2) + "%" },
    {name:"可用内存的百分比", value: (100 * os.freememPercentage()).toFixed(2) + "%" },
    {name:"系统已运行时间", value: getResponseTime(os.sysUptime()) },
    {name:"进程已运行时间", value:  getResponseTime(os.processUptime()) },
    {name:"获取1分钟的平均负载", value: os.loadavg(1) },
  ]
}

async function init(){
  const ret = await async.parallel([getCpuUsage, getCpuFree])
  return get().concat(ret);
}

var WebSocketServer = require('ws').Server,
  wss = new WebSocketServer({
    path: "/getInfo",
    port: 1088
  })

var clientMap = new Object()
var timer;

wss.on('connection', (ws) => {
  ws.on('message', (msg) =>{
    ws.name = msg
    clientMap[ws.name] = ws
    // console.log("msg",msg.toString());
    timer = setTimeout(async ()=>{
      try{
        // console.log("连接数=>" + Object.keys(clientMap).length);
        let data = await init();
        // for(let key in clientMap){
        //   clientMap[key] && clientMap[key].send(JSON.stringify(data))
        // }
         clientMap[msg] && clientMap[msg].send(JSON.stringify(data))
      }catch(err){
        console.log("err=>" + err);
      }
    },1000)
  })
  ws.on('close', () =>{
    delete clientMap[ws.name]
  })
})




// //计算下一秒的CPU使用率。这不是“os”模块中 CPU 使用率的平均值。回调将接收一个带有值的参数
// os.cpuUsage(percentage=>{
//   console.log(percentage);
// });
// // 计算下一秒的空闲CPU。这不是基于像“os”模块中的平均 CPU 使用率。回调将接收一个带有值的参数
// os.cpuFree(percentage=>{
//   console.log(percentage);
// });
// 获取平台名称
// console.log(os.platform());
// // 获取CPU数量
// console.log(os.cpuCount());
// // 获取当前可用内存
// console.log(os.freemem());
// // 获取总内存
// console.log(os.totalmem());
// // 获取空闲内存的百分比
// console.log(os.freememPercentage());
// // 获取系统已运行的秒数
// console.log(os.sysUptime());
// // 获取进程已运行的秒数
// console.log(os.processUptime());
// // 获取5分钟的平均负载
// console.log(os.loadavg(5));